package com.sun.listener;

import com.sun.pojo.Student;
import com.sun.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.servlet.ServletContext;

@Component
public class MyServletContextListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {

        /**
         * IoC容器是Spring的核心模块，是抽象了对象管理、依赖关系管理的框架解决方案。
         * 有两个主要的容器系列，一个是实现了BeanFactory(面向Spring本身)接口的简单容器系列，
         * 这系列容器只实现了容器的最基本功能；另一个是ApplicationContext(面向使用Spring框架的开发者)应用上下文，
         * 它作为容器的高级形态而存在，除了BeanFactory的基本功能，还提供了更多丰富的功能，常用的有
         * ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext。
         */
        //先获取到applicaiton上下文
        ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
        //获取对应的service
        StudentService studentService = applicationContext.getBean(StudentService.class);
        Student student = studentService.queryStudentById(1);
        //将获取的Student对象存入到redis中

        redisTemplate.opsForValue().set("student",student);
        //也可以将获取的Student对象存入到application作用域中
        ServletContext application = applicationContext.getBean(ServletContext.class);
        application.setAttribute("student",student);
    }
}
